#ifndef __CACHEGROUP_HPP__
#define __CACHEGROUP_HPP__


#include "LRUCache.hpp"

class CacheManager;
/*
 * cache组类，用于负责多块cache的同步，查询问题
 * 为何插入记录采用键值对方式，该如何理解？
 * 对于关键字查询而言：key为查询的环境中，value为服务端返回的结果
 * 均可采用字符串的方式保存
 * 对于网页查询网页的关键字，value为查询网页返回的结果，
 * value也可采用字符串的方式保存
 * */

class CacheGroup {
    friend CacheManager;
public:
    //从一组里面选出指定的Cache
    CacheGroup(size_t);
    //查询一条记录
    string getRecord(const string &);
    //插入一条记录
    void insertRecord(const string &, const string &);
    //缓存信息加载到内存
    void load(const string &);
    //缓存信息存入磁盘
    void store(const string &);
    //更新缓存信息
    void update(const CacheGroup &);

    LRUCache getMainCache();
private:
    //主缓存
    LRUCache _mainCache;
    //待更新记录
    LRUCache _pendingUpdateCache;
    //只读标志位，若为true则不允许写，反之可以写
    bool _readOnly; 
};


#endif
